﻿using Castle.Core.Logging;
using DotNetOpenAuth.AspNet;
using User.Global.Contracts.Message;

namespace User.Global.Contracts.Membership
{
    /// <summary>
    /// Login bzw. Registrierung eines Accounts über OAuth.
    /// </summary>
    /// <typeparam name="TUser"></typeparam>
    public interface IOAuthMembership<TUser>
    {
        AuthenticationResult AuthResult { get; set; }

        /// <summary>
        /// Login über den Oauth Account
        /// </summary>
        /// <returns></returns>
        bool Login();

        /// <summary>
        /// Verbinden des aktuellen UserAccounts mit einem OAuth Account
        /// </summary>
        /// <returns></returns>
        bool JoinProviderAccount();

        /// <summary>
        /// Allgemeine Messageverwaltung für die jeweiligen Meldungen die ausgegeben werden sollen.
        /// </summary>
        IAddMessage Message { get; set; }

        /// <summary>
        /// Der aktuelle Logger
        /// </summary>
        ILogger Logger { get; set; }
    }
}
